package com.myown.structure;

/**
 * 树接口 <p>
 *
 * @author lincky
 * @version v1.0.0
 * @time 2017.02.27 16:38
 */
public interface Tree<E extends Comparable<E>> extends Iterable<E> {
    /**
     * 获取树元素大小
     *
     * @return 树元素大小
     */
    int size();

    /**
     * 插入节点（O(depth)） <p>
     *
     * @param item 元素
     */
    void insert(E item);

    /**
     * 删除值为<tt>item</tt>的节点（O(depth)） <p>
     *
     * @param item 待删除节点的值
     */
    void delete(E item);

    /**
     * 清空树
     */
    void clear();

    /**
     * 最小元素 <p>
     *
     * @see #minimun()
     * @return 最小元素
     */
    E minimun();

    /**
     * 最大元素 <p>
     *
     * @see #maximun()
     * @return 最大元素
     */
    E maximun();

    /**
     * 检查树是否合法：测试
     */
    void valid();


    TreeNode<E> find(E item);

    TreeNode<E> inOrderSuccessor(TreeNode<E> node);


}
